home *** CD-ROM | disk | FTP | other *** search
/ Mac Format 1996 April / MacFormat CD Edition MF36 (April 1996).iso / Shareware City / Developers / Tools Plus - GUI⁄Event libs / Tools Plus 2.6.1a Evaluat'n Kit / Tools Plus 2.6.1a / User Manual / Update History / Read Me! 2.5 -> 2.5.2 changes < prev    next >
Text File  |  1994-09-17  |  19KB  |  310 lines

  1. Tools Plus Changes: 2.5 to 2.5.2
  2. ~~~~~~~~~~~~~~~~~~~~~~~~~
  3. Display this document in Geneva 12pt.
  4.  
  5. You need to read this document if:
  6.    √ You are upgrading from an older version of Tools Plus. If you
  7.        are upgrading from a version older than 2.5, read all other
  8.        applicable change documents first.
  9.    √ If you have purchased Tools Plus 2.5.2 and it arrived with a
  10.        Tools Plus 2.5 User Manual.  Double-bullets (••) denote changes
  11.        that are NOT in the printed manual.
  12.  
  13.  
  14.                                       * * * W A R N I N G * * *
  15.  
  16.           THIS UPDATE INCLUDES REVISIONS THAT MAY REQUIRE YOU
  17.           TO CHANGE PARTS OF YOUR EXISTING APPLICATION(S). 
  18.           PLEASE READ CAREFULLY.
  19.  
  20.  
  21. Tools Plus 2.5.2, released in September 1994, includes the following changes implemented since the previous version, 2.5.1:
  22.  
  23.   • Tools Plus 2.5.2 contains a new set of libraries and files.
  24.      Replace your existing Tools Plus files with the new ones included
  25.      in this update. Delete all your old copies of the Tools Plus
  26.      libraries and related files (C header, Pascal interface etc.)
  27.  
  28.   • (C/C++ only) the PopUpStyle and MenuStyle routines now work
  29.      correctly.  They used to always set the style to “underline and
  30.      outline” on some Macs.
  31.  
  32.   • Right-aligned and centered Editing Fields now scroll text into
  33.      view correctly (we have replaced the default TextEdit scrolling
  34.      routine with our own).
  35.  
  36.   • Text pasting has been accelerated when (i) you paste text that
  37.      contains carriage returns into a field that disallows carriage
  38.      returns, or (ii) you paste a lot of text into a length limited field.
  39.      In previous versions you could see “character at a time” pasting.
  40.      This was especially evident on slower Macs.
  41.  
  42.   • All editing fields now scroll and display better than ordinary
  43.      TextEdit fields.  When the cursor is dragged out of the editing
  44.      field, the field’s text is automatically scrolled into view. The
  45.      further the cursor is moved out of the field, the faster the text
  46.      is scrolled.
  47.  
  48. •• User Manual page 35 should contain the following _NEW_
  49.      information…
  50.         You can optionally have Tools Plus position your window for
  51.      you. The most common example of this is centering a modal
  52.      dialog on the main monitor (perhaps to display a progress
  53.      thermometer).  You can also “tile” windows when you need to
  54.      open multiple windows and you don’t want to calculate each
  55.      window’s position.  Window tiling calculates the new window’s
  56.      position relative to the front most standard window (it is not
  57.      useful for floating palettes or modal windows).  To center or tile
  58.      a window, add the wCenter or wTile constant to the window’s
  59.      procID.
  60.  
  61.         The WindowOpen and WindowOpenRect now accept long (4 byte)
  62.      integers for their procID. The constants which may be added to
  63.      the window’s procID are:
  64.          wCenter  = $00010000; {auto-centering added to procID }
  65.          wTile      = $00020000; {auto-tiling added to procID       }
  66.  
  67. •• User Manual page 35 should contain the following _NEW_
  68.      information…
  69.         In Tools Plus, you can make any window behave like a floating
  70.      palette simply by adding the wPalette constant to the window’s
  71.      procID (both paletteProc and altPaletteProc already include this
  72.      option).  This allows you to use third-party WDEFs for their
  73.      appearance, while Tools Plus makes them behave like floating
  74.      palettes.
  75.         You can write your own WDEF for floating palettes, or you can
  76.      use third-party WDEFs.  As per Macintosh standards, a window’s
  77.      procID is comprised from the following formula: WDEF ID x 16 +
  78.      variant code.  When you add the wPalette constant to the
  79.      window’s procID, Tools Plus makes the window behave like a
  80.      floating palette.
  81.            wPalette  = $80000000; {window behaves like palette (add }
  82.                                                   {this constant to procID)                }
  83.  
  84. •• User Manual page 83, 3rd paragraph should contain the following
  85.      _NEW_ information…
  86.         If a field’s height is less than or equal to its font’s height (font
  87.      height can be determined by calling the GetFontInfo procedure and
  88.      adding Ascent + Descent + Leading ), and you disallow carriage
  89.      return characters ($0D) in the field, the field is deemed to be a
  90.      “single line field.”  Word wrap does not occur in single line
  91.      fields.  Instead, the field’s text automatically scrolls to ensure
  92.      that the selection always remains in view
  93.        In prior versions, single line fields allowed the inclusion of
  94.      carriage return characters.  Fields whose text is centered can
  95.      now be “single line”.
  96.  
  97.   • The Edit menu’s Undo…/Redo… command has been enhanced when
  98.      working with Editing Fields. When you use “Undo…”, the field’s
  99.      selection range (or insertion point) is set to the character(s)
  100.      affected by the original operation. When you use “Redo…”, the
  101.      field’s selection range (or insertion point) is set appropriately
  102.      to reflect the completion of the operation (i.e., at the end of
  103.      pasted or typed text).
  104.  
  105.   • (C/C++ only) The PascalStrHandles.c file (it contains routines
  106.      used to copy a C string into a Pascal string handle, and vice
  107.      versa) has been corrected to use an “unsigned char” for the
  108.      Pascal string’s length byte (byte-0 in the string).  Otherwise,
  109.      strings over 127 characters long would not be copied correctly.
  110.  
  111. •• (C/C++ only) The ToolsPlus.h header file has been updated to use
  112.      a more correct C syntax in places where a Pascal var Str255
  113.      would have occurred. The example below illustrates the change:
  114.  
  115.          OLD:      pascal void GetFieldString (Str255 *EditString);
  116.          NEW:     pascal void GetFieldString (Str255 EditString);
  117.  
  118.      The routines affected by this a change are:
  119.          GetFieldString
  120.          GetListBoxText
  121.          GetMenuString
  122.          GetPopUpString
  123.  
  124. •• User Manual page 129, EnableMenu section should contain the
  125.      following _NEW_ information…
  126.         You can now disable and enable the entire Apple menu by using:
  127.                 EnableMenu(0, 0, disabled);        or
  128.                 EnableMenu(0, 0, enabled);
  129.  
  130.   • When the user types a Command-key that does not match those in
  131.      enabled menu items (or if menus are inaccessible because a
  132.      modal window is displayed), the Command key is passed to your
  133.      application by a doKeyDown or doAutoKey event.
  134.        This is evident in modal windows because Tools Plus used to
  135.      beep the user when a Command-key was typed. Now, the key is
  136.      passed back to your application, and your application can elect to
  137.      process the key or to beep the user.
  138.        If a modal window has a “close box”, typing Command-W no
  139.      longer results in a doGoAway event being reported for that
  140.      window.
  141.  
  142.   • Tools Plus no longer uses the TEGetScrapLen routine, which has
  143.      been obsoleted in newer MacTraps libraries (C/C++).  In previous
  144.      versions of Tools Plus, some C/C++ programmers had to use the
  145.      “Old MacTraps” file in lieu of “MacTraps.” This is no longer the
  146.      case.
  147.  
  148. •• User Manual page 202, Wait section should be changed to note
  149.      that the Wait routine now accepts a long (4 bytes) integer
  150.      parameter.
  151.  
  152. •• User Manual page 180, note that the polling record’s Poll.Event
  153.      field is also populated by the doResume and doSuspend events.
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160. ------------------------------------------------------------
  161. •• Handles to an Editing Field’s string
  162. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  163.   Prior versions of Tools Plus did not allow odd length editing field strings (except for Str255). This was due to a carry-over from THINK Pascal which rounds string structures to even byte boundaries (i.e., a string[20] reserves 20 bytes for the characters, plus 1 length byte, then rounded up to 22 bytes).
  164.   As a result of this rounding phenomenon, prior versions of Tools Plus would “round down” the logical length of a string (because a 14 character and 15 character field _both_ produced a 16 byte structure in THINK Pascal).
  165.   To remedy this anomaly, a new NewStrHandle routine has been provided to let you create initialized string handles that are exactly the right size.  C/C++ programmers can still opt to use the toolbox’s NewHandle routine in conjunction with the sizeof routine.
  166.   You will probably have to modify your existing application(s) to use the NewStrHandle routine instead of NewHandle.
  167.  
  168.  
  169.  
  170. Please add the following note to page 82 of the printed manual:
  171.  
  172. Note: Your application must allocate memory for each handle that it
  173.          provides to Tools Plus by using the NewHandle or Tools Plus’s
  174.          NewStrHandle routine.  Tools Plus does not automatically
  175.          allocate this memory.  If your editing fields contain random
  176.          characters, it is a sure sign that you have not allocated
  177.          memory for your handle.
  178.  
  179.  
  180.  
  181. Please add the following new routine to page 87 of the printed manual:
  182.  
  183. NewStrHandle
  184. ~~~~~~~~~~~
  185. Allocate memory for a Pascal string, and initialize it to an empty string.
  186.  
  187.    pascal StringHandle NewStrHandle (short StringLen);
  188.  
  189.    function NewStrHandle (StringLen: INTEGER): STRINGHANDLE;
  190.  
  191.   StringLen is the size of the Pascal string (from 1 to 255 characters) being allocated.  NewStrHandle automatically allocates one additional byte of heap memory to accommodate the entire Pascal string plus a length byte.
  192.  
  193.   The function’s value returns a string handle to a Pascal string of the specified length.  The string is initialized to an empty string (‘’), thus making is ready for immediate use with the NewField or NewFieldRect routines.
  194.  
  195.  
  196.  
  197. Please replace the third paragraph of the NewField description (on page 87 in the printed manual) with the following:
  198.  
  199.   HStr is a handle that provides this field with a reference to its string.  The handle can be generic, but it’s treated like a string handle by Tools Plus, in that the first byte of its memory block is a length byte and the remainder is the actual string.  A copy of the hStr handle’s contents is used while the field is being edited.  It is also used to automatically display an inactive edit field’s text when a window needs to be refreshed.  Each field must have its own string.  You must allocate memory for the handle and set it to a default string value before using it in the NewField routine.  A good way to both allocate and initialize the handle is to use the NewStrHandle routine.
  200.  
  201. ------------------------------------------------------------
  202. •• A new routine has been added (add to page 91) that lets your application determine if a field is empty without having to get its text.
  203.  
  204. FieldIsEmpty
  205. ~~~~~~~~~~
  206. Determine if the specified field is empty.
  207.  
  208.    pascal Boolean FieldIsEmpty (short Field);
  209.  
  210.    function FieldIsEmpty (Field: INTEGER): BOOLEAN;
  211.  
  212.   Field specifies the field number (from 1 to 255) that is queried in the current window.
  213.  
  214.   The function’s value returns true if the field is empty (string length is zero).  A non-zero length string returns a value of false.  If the specified field is the window’s active editing field (even though the window itself may not be active at the time), the function is performed on the field’s edited text.  Otherwise, the function is performed on the field’s string.  If the current window doesn’t belong to your application, or if no windows are open, or if the field does not exist in the current window, FieldIsEmpty returns with a value of true.
  215.  
  216. ------------------------------------------------------------
  217. •• A new event type has been added (add to page 109).  This event will be ignored by most applications.
  218.  
  219. doPreRefresh (event)
  220. ~~~~~~~~~~~~~~~~
  221. A window’s contents _may_ be refreshed (redrawn) before Tools Plus refreshes its own objects.
  222.  
  223.   Most applications will ignore this event.  A doPreRefresh event is reported before each doRefresh event (which occurs when a window is completely or partially obscured, then becomes uncovered and needs to be redrawn).  The doPreRefresh event lets your application draw or display objects before Tools Plus draws its own objects (buttons, picture buttons, scroll bars, editing fields, list boxes, pop-up menus, and custom controls).
  224.  
  225.   An example of the doPreRefresh event’s usefulness is if your application displays a picture as a background for a window.  When your application receives a doPreRefresh event, it can draw the background picture only.  The next time your application calls PollSystem, Tools Plus will refresh all its own objects and report a doRefresh event for your application to process.
  226.  
  227.   When a doPreRefresh event is reported, the window’s “update region” defines the exact area that needs to be refreshed.  Although you can redraw everything in the window, the actual drawing is limited to the parts of the window that are visible and which need refreshing.
  228.  
  229. Programming Considerations
  230. ~~~~~~~~~~~~~~~~~~~~~~
  231. • When your application detects a doPreRefresh event, it should
  232.    respond in the following manner:
  233.  
  234.  
  235. CurrentWindow(Poll.Window);      {Make the affected window the   }
  236.                                                      {  current grafPort.                     }
  237. BeginUpdate(WindowPointer(Poll.Window));{Drawing will occur only}
  238.                                                     {   within the area that needs        }
  239.                                                     {  refreshing (includes all             }
  240.                                                     {  monitors).                                  }
  241. for theScreen:=1 to NumberOfScreens do   {Repeat for each monitor }
  242.   begin                                         {  in which the window appears.     }
  243.     BeginUpdateScreen(theScreen);    {Drawing area reduced to the    }
  244.                                                         {  specified screen.                   }
  245.  
  246.     {   …insert your color-dependent drawing code here…   }
  247.  
  248.     EndUpdateScreen;        {End the drawing for this       }
  249.                                        {  monitor, and restore the     }
  250.                                        {  window’s visible (drawing) }
  251.   end;                               {  region.                                }
  252.  
  253.  {   …insert your color-independent drawing code here…   }
  254.  
  255. EndUpdate(WindowPointer(Poll.Window)); {End the update for the    }
  256.                                                                  {   window.                       }
  257. CurrentWindowReset;      {Reset the current window to be }
  258.                                        {  the same as the active window}
  259.                                        {  (optional command).                 }
  260.  
  261.  
  262. * BeginUpdate temporarily sets the window’s visRgn (visible region where drawing occurs) to the intersection of the visRgn and updateRgn (region requiring updating).  This effectively restricts drawing to the area that needs updating.  The affected area may include Tools Plus objects which are automatically refreshed the next time PollSystem is called.
  263.  
  264. * If your application did not put anything in the window except buttons, picture buttons, scroll bars, editing fields, list boxes, pop-up menus, and custom controls, it should ignore the doPreRefresh event.
  265.  
  266. * It is possible that several windows will need to be refreshed simultaneously if, for instance, a closing window exposed three windows behind it.  PollSystem reports a single doPreRefresh event (followed by a doRefresh event) each time it is called in the event loop, one event for each window that needs refreshing.
  267.  
  268. * Unlike ordinary Macintosh applications, a doPreRefresh event is not generated when a window is first opened.
  269.  
  270. * A doPreRefresh event is not generated for desk accessories, Dialog Manager dialogs, alerts, or Dynamic Alerts.  These events are handled automatically.
  271.  
  272. * When responding to a doPreRefresh event, your application should limit itself to activities that pertain only to refreshing the specified window.  Do not create or modify user interface elements, open, close, or move windows.
  273.  
  274. * Your application can easily do all its drawing in response to a doPreRefresh event, or a doRefresh event.  If, however, your application wants to do some drawing in response to both events, you will need to get a copy of the affected window’s visRgn (visible region) while inside the BeginUpdate/EndUpdate structure (to determine the region that is affected by the doPreRefresh drawing).  After you finish refreshing the window and you have called EndUpdate, invalidate the affected region by using InvalRgn.  This will ensure that your application will redraw the necessary objects in response to the doRefresh event.
  275.  
  276. Valid Polling Record Fields
  277. ~~~~~~~~~~~~~~~~~~~~~
  278. Poll.Window
  279.  
  280. ------------------------------------------------------------
  281. •• A new event type has been added (add to page 178).  This event will be ignored by most applications.
  282.  
  283. doChgInField (event)
  284. ~~~~~~~~~~~~~~~~
  285. Indicator that the contents of your application’s active editing field have been changed.
  286.  
  287.   The doChgInField event is reported whenever the active field in your application is altered, either through typing, cutting, pasting (including the use of the PasteIntoField routine), clearing, or undoing/redoing (using the Edit menu).  Most applications will ignore this event.
  288.  
  289. Valid Polling Record Fields
  290. ~~~~~~~~~~~~~~~~~~~~~
  291. Poll.Window
  292. Poll.Field
  293.  
  294. ------------------------------------------------------------
  295. •• The following note has been added to the User Manual. It pertains to C programmers compiling the Tools Plus Demo application…
  296.  
  297. IMPORTANT! Errors when compiling the Demo…
  298.  
  299.   At the time of this writing, Water’s Edge Software has made every effort to ensure that our demo application will compile successfully the first time. Unfortunately, Symantec C/C++ compilers have undergone a series of revisions and some inconsistencies have arisen between compiler versions. Fortunately, these differences are simple to resolve.
  300.  
  301.   If your compiler gives you an error that states “argument to function ‘x’ does not match prototype,” it indicates that Symantec has made a minor revision to that function’s prototype (in the error message, ‘x’ will be replaced by the function’s name). To correct this error, inspect the offending line in the source file, which is likely a line like:
  302.  
  303.     PenPat(&gray);
  304.  
  305. and revise it to match the prototype in the related header file. In the example above, the correction is as simple as changing the line to:
  306.  
  307.     PenPat(gray);        /* Remove ampersand (&) from the variable */
  308.  
  309.   To date, all inconsistencies have been of this nature. We are sorry for the inconvenience these issues may cause you, and would like to offer our assistance if you have problems getting the demo compiled. See the “Technical Support” chapter for information on how to contact Water’s Edge Software for assistance.
  310.